#include<stdio.h>

int main(void) {
	//上次的文件我们说了下scanf的缺陷，有缓冲区残留的问题，并讲到要用getchar()来解决
	//接下来我们补充其他的解决方法
	int a, b;
	char c;
	//假如我们现在要在一行中输入整数a，b和字符c
	//如果直接写scanf("%d%d%c", &a, &b, &c);可以自己试一下，只要第二个数字后面有空格或者换行，c就是空格或者换行，而不能正常读入
	//理解了缓冲区残留我们就能知道为什么，因为上一次没有读入的空格和回车还在缓冲区中，读字符的时候直接读入了
	//如果我们仍然使用getchar()来解决，可以，但是可以试一下，如果第二个数字后面有两个空格或者两个回车，一个空格一个回车，一个回车一个空格，就失效了
	//下面我们讲下scanf的细节，其本质是——匹配
	scanf("%d%d %c", &a, &b, &c);
	//这里%d和%c中间加了个空格，意思是匹配空白字符(空格，回车，或者指标符Tab(这个了解即可))，可以是1个，也可以是0个或者任意个
	printf("%d\n%d\n%c\n",a,b,c);//这段代码用于测试，你可以试一下输出两个数字之后一直输入空格回车，程序不会停止，直到你输入非空白字符
	//再试一下1 2c这样的输入，理解匹配0个空白符

	//下面补充下数组的知识，前面讲过了一维数组，下面讲下二维数组和多维数组
	//二维数组，它其实就是多个一维数组的连续存储，在内存中存放是行优先——先存放第一行，再第二行。。。
	int x[100][200] = { 0};//全部初始化为0
	int y[10][10] = { 1 };//y[0][0]初始化为1，其他没有赋值
	int z[3][4] = { 1,2,3,4,5,6,7,8 };//3行4列的数组(可以理解为矩阵)，第一行赋值为1，2，3，4，第二行赋值为5，6，7，8(理解行优先就明白为什么是这样了)，其他没有赋值
	//遍历
	for (int i = 0; i < 2; i++) {
		for (int j = 0; j < 4; j++)
			printf("%d ", z[i][j]);
		putchar(10);//小技巧，输出换行符，等价于printf("\n")，'\n'的ACSII码是10
	}//输出z的前两行 
	//多维数组也同理了，不多介绍了
	int w[3][4][5];
	return 0;
}